home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / hp48hor1 / disd.src < prev    next >
Text File  |  1991-02-21  |  13KB  |  539 lines

  1. %%HP: T(3)A(D)F(.);
  2. @ Saturn Disassembler package
  3. @ by Kevin Pryor;
  4. @ improvements by John Gilbert.
  5. DIR
  6.   DISR
  7.     \<< HEX
  8.       CASE DUP TYPE 10 ==
  9.         THEN DUP 'ADDR' STO PKS
  10.         END DUP TYPE 12 ==
  11.         THEN ODMP
  12.           IF DUP SIZE DUP 16 <
  13.           THEN ADDR + PKS +
  14.           ELSE DROP
  15.           END
  16.         END
  17.       END \-> ob
  18.       \<< ob DIS SWAP PCAD SWAP \-> code ob2
  19.         \<< code ADDR B2S \->TAG ob2 ob SIZE ob2 SIZE - ADDR + 'ADDR' STO
  20.           'ODMP' STO
  21.         \>>
  22.       \>>
  23.     \>>
  24.   DISJ
  25.     \<< ADRJ DISR
  26.     \>>
  27.   PKS
  28.     \<< "000000000000000" SWAP PEEK B2S + RVRS 1 16 SUB
  29.     \>>
  30.   DIS
  31.     \<< HEX \-> m
  32.       \<< m 2 1000 SUB {
  33.         \<< O0
  34.         \>>
  35.         \<< O1
  36.         \>>
  37.         \<< "MOVE.1 " m 2 2 SUB + ",P" + CUT1
  38.         \>>
  39.         \<< m 2 2 SUB XTON \-> i
  40.           \<< "MOVE.P" i 1 + R\->B B2S + " " + m 3 3 i + SUB RVRS + ",C" +
  41.             i 2 + CUTX
  42.           \>>
  43.         \>>
  44.         \<< "BRCS PC" m 2 3 SUB DUP
  45.           CASE "20" ==
  46.             THEN DROP2 "NOP3"
  47.             END DUP "00" ==
  48.             THEN DROP2 "RETCS"
  49.             END RVRS 1 PCA +
  50.           END CUT2
  51.         \>>
  52.         \<< "BRCC PC" m 2 3 SUB
  53.           IF DUP "00" ==
  54.           THEN DROP2 "RETCC"
  55.           ELSE RVRS 1 PCA +
  56.           END CUT2
  57.         \>>
  58.         \<< "JUMP.3 PC" m 2 4 SUB DUP
  59.           CASE "300" ==
  60.             THEN DROP2 "NOP4"
  61.             END m 2 5 SUB "4000" ==
  62.             THEN DROP2 "NOP5" CUT1
  63.             END RVRS 1 PCA +
  64.           END CUT3
  65.         \>>
  66.         \<< "CALL.3 PC" m 2 4 SUB RVRS 4 PCA + CUT3
  67.         \>>
  68.         \<< O8
  69.         \>>
  70.         \<< m
  71.           IF m 2 2 SUB "8" <
  72.           THEN OTT
  73.           ELSE OZZ
  74.           END CUT4
  75.           IF DUP 1 2 SUB "BR" == m 4 5 SUB "00" == AND
  76.           THEN DUP ",PC" POS 1 - 3 SWAP SUB "RET" SWAP +
  77.           END
  78.         \>>
  79.         \<< m 2 2 SUB
  80.           IF DUP "8" <
  81.           THEN T2F m 3 3 SUB OKK
  82.           ELSE XTON 8 - \->STR T2F m 3 3 SUB OPP
  83.           END CUT2
  84.         \>>
  85.         \<< m 2 2 SUB
  86.           IF DUP "8" <
  87.           THEN T2F m 3 3 SUB OQQ
  88.           ELSE XTON 8 - \->STR T2F m 3 3 SUB ORR
  89.           END CUT2
  90.         \>>
  91.         \<< "A" m 2 2 SUB OKK CUT1
  92.         \>>
  93.         \<< "A" m 2 2 SUB OPP CUT1
  94.         \>>
  95.         \<< "A" m 2 2 SUB OQQ CUT1
  96.         \>>
  97.         \<< "A" m 2 2 SUB ORR CUT1
  98.         \>> } m 1 1 SUB XTOM GET EVAL SWAP
  99.       \>>
  100.     \>>
  101.   ADDR # 1FCCh
  102.   ADRJ # 1FC6h
  103.   ODMP "8576310857660084785285680C"
  104.   PEEK
  105.     \<< B\->R R\->B Code
  106.     \>>
  107.   RVRS @ [replaced with Derek Nickel's REV machine-code!  -jkh-]
  108.     \<< \-> s
  109.       \<< "" s SIZE 1
  110.         FOR x s x x SUB + -1
  111.         STEP
  112.       \>>
  113.     \>>
  114.   S2B
  115.     \<< "#" SWAP +STR\->
  116.     \>>
  117.   B2S
  118.     \<< \->STR DUP SIZE1 - 3 SWAP SUB
  119.     \>>
  120.   PCA
  121.     \<< \-> s n
  122.       \<<
  123.         IF s 1 1SUB "7" >
  124.         THEN "-" 16s SIZE ^ s S2B - n- B2S +
  125.         ELSE "+" sS2B n + B2S +
  126.         END
  127.       \>>
  128.     \>>
  129.   XTON
  130.     \<< "#" SWAP +STR\-> B\->R
  131.     \>>
  132.   O8
  133.     \<< \-> m
  134.       \<< m 2 1000SUB {
  135.         \<< O80
  136.         \>>
  137.         \<< O81
  138.         \>>
  139.         \<< "CLRB " m 2 2 SUB X2D + CUT1
  140.         \>>
  141.         \<< "BRBC " m 2 2 SUB X2D + ",PC" + m 3 4 SUB RVRS 3 PCA + CUT3
  142.         \>>
  143.         \<< "CLRB " m 2 2 SUB + ",ST" + CUT1
  144.         \>>
  145.         \<< "SETB " m 2 2 SUB + ",ST" + CUT1
  146.         \>>
  147.         \<< "BRBC " m 2 2 SUB + ",ST,PC" + m 3 4 SUB RVRS 3 PCA + CUT3
  148.         \>>
  149.         \<< "BRBS " m 2 2 SUB + ",ST,PC" + m 3 4 SUB RVRS 3 PCA + CUT3
  150.         \>>
  151.         \<< "BRNE.1 P," m 2 2 SUB + ",PC" + m 3 4 SUB RVRS 3 PCA + CUT3
  152.         \>>
  153.         \<< "BREQ.1 P," m 2 2 SUB + ",PC" + m 3 4 SUB RVRS 3 PCA + CUT3
  154.         \>>
  155.         \<< "8" m + OTT CUT3
  156.         \>>
  157.         \<< "8" m + OZZ CUT3
  158.         \>>
  159.         \<< "JUMP.4 PC" m 2 5 SUB RVRS 2 PCA + CUT4
  160.         \>>
  161.         \<< "JUMP.A " m 2 6 SUB RVRS DUP S2B 'ADRJ' STO + CUT5
  162.         \>>
  163.         \<< "CALL.4 PC" m 2 5 SUB RVRS 6 PCA + CUT4
  164.         \>>
  165.         \<< "CALL.A " m 2 6 SUB RVRS DUP S2B 'ADRJ' STO + CUT5
  166.         \>> } m 1 1 SUB XTOM GET EVAL
  167.         IF DUP 1 2 SUB "BR" == m 3 4 SUB "00" == AND
  168.         THEN DUP ",PC" POS 1 - 3 SWAP SUB "RET" SWAP +
  169.         END
  170.       \>>
  171.     \>>
  172.   OZZ
  173.     \<< \-> m
  174.       \<< { "BRGT." "BRLT." "BRGE." "BRLE." } m 3 3 SUB XTON 4 / IP 1 + GET
  175.         m 1 2 SUB TT2F + " " + m 3 3 SUB W2D + "," + m 3 3 SUB W2D2 + ",PC"
  176.         + m 4 5 SUB RVRS 3 PCA +
  177.       \>>
  178.     \>>
  179.   OTT
  180.     \<< \-> m
  181.       \<< { "BREQ." "BRNE." "BRZ." "BRNZ." } m 3 3 SUB XTON 4 / IP 1 + GET
  182.         m 1 2 SUB TT2F + " " + m 3 3 SUB W2D +
  183.         IF m 3 3 SUB DUP "8" <
  184.         THEN W2D2 "," SWAP + +
  185.         ELSE DROP
  186.         END ",PC" + m 4 5 SUB RVRS 3 PCA +
  187.       \>>
  188.     \>>
  189.   O808
  190.     \<< \-> m
  191.       \<< m 2 1000 SUB { "INTON"
  192.         \<<
  193.           IF m 2 2 SUB "0" ==
  194.           THEN "RSI"
  195.           ELSE ""
  196.           END CUT1
  197.         \>>
  198.         \<< m 2 2 SUB STR\-> \-> i
  199.           \<< "MOVE.P" i 1 + \->STR + " " + m 3 3 i + SUB RVRS + ",A" + i 2 +
  200.             CUTX
  201.           \>>
  202.         \>> "BUSCB"
  203.         \<< "CLRB " m 2 2 SUB + ",A" + CUT1
  204.         \>>
  205.         \<< "SETB " m 2 2 SUB + ",A" + CUT1
  206.         \>>
  207.         \<< "BRBC " m 2 2 SUB + ",A,PC" + m 3 4 SUB RVRS 5 PCA + CUT3
  208.         \>>
  209.         \<< "BRBS " m 2 2 SUB + ",A,PC" + m 3 4 SUB RVRS 5 PCA + CUT3
  210.         \>>
  211.         \<< "CLRB " m 2 2 SUB + ",C" + CUT1
  212.         \>>
  213.         \<< "SETB " m 2 2 SUB + ",C" + CUT1
  214.         \>>
  215.         \<< "BRBC " m 2 2 SUB + ",C,PC" + m 3 4 SUB RVRS 5 PCA + CUT3
  216.         \>>
  217.         \<< "BRBS " m 2 2 SUB + ",C,PC" + m 3 4 SUB RVRS 5 PCA + CUT3
  218.         \>>
  219. "JUMP.A @A" "BUSCD" "JUMP.A @C" "INTOFF" } m 1 1 SUB XTOM GET EVAL
  220.         IF DUP 1 2 SUB "BR" == m 3 4 SUB "00" == AND
  221.         THEN 3 8 SUB "RET" SWAP +
  222.         END
  223.       \>>
  224.     \>>
  225.   Z2SD
  226.     \<< XTOM { "" "" "" "" "B,A" "C,B" "A,C" "C,D" "A,B" "B,C" "C,A" "D,C" }
  227. SWAP GET
  228.     \>>
  229.   OQQ
  230.     \<< \-> m
  231.       \<<
  232.         CASE m "B" >
  233.           THEN "SUBN." SWAP + " " + m XTON 4 MOD \->STR X2SD +
  234.           END m "3" > m "8" < AND 
  235.           THEN "INC." SWAP + " " + m XTON 4 MOD \->STR W2D +
  236.           END "SUB." SWAP + " " + m X2SD +
  237.         END
  238.       \>>
  239.     \>>
  240.   OPP
  241.     \<< \-> m
  242.       \<<
  243.         CASE m "4" <
  244.           THEN "CLR." SWAP + " " + m W2D +
  245.           END m "B" >
  246.           THEN "SWAP." SWAP + " " + m XTON 4 MOD \->STR X2SD +
  247.           END "MOVE." SWAP + " " + m Z2SD +
  248.         END
  249.       \>>
  250.     \>>
  251.   X2D
  252.     \<< "#" SWAP + STR\-> \-> n
  253.       \<< ""
  254.         IF n # 1h AND B\->R
  255.         THEN "XM," +
  256.         END
  257.         IF n # 2h AND B\->R
  258.         THEN "SB," +
  259.         END
  260.         IF n # 4h AND B\->R
  261.         THEN "SR," +
  262.         END
  263.         IF n # 8h AND B\->R
  264.         THEN "MP," +
  265.         END DUP SIZE 1 - 1 SWAP SUB
  266.       \>>
  267.     \>>
  268.   O0
  269.     \<< \-> m
  270.       \<< m 2 1000 SUB { "RETSETXM" "RET" "RETSETC" "RETCLRC" "SETHEX"
  271. "SETDEC" "PUSH.A C" "POP.A C" "CLR.X ST" "MOVE.X C,ST" "MOVE.X ST,C"
  272. "SWAP.X C,ST" "INC.1 P" "DEC.1 P"
  273.         \<< O0E
  274.         \>> "RETI" } m 1 1 SUB XTOM GET EVAL
  275.       \>>
  276.     \>>
  277.   X2SD
  278.     \<< XTOM { "B,A" "C,B" "A,C" "C,D" "A,A" "B,B" "C,C" "D,D" "A,B" "B,C"
  279. "C,A" "D,C" } SWAP GET
  280.     \>>
  281.   OKK
  282.     \<< \-> m
  283.       \<<
  284.         IF m "C" <
  285.         THEN "ADD." SWAP + " " + m X2SD +
  286.         ELSE "DEC." SWAP + " " + m W2D +
  287.         END
  288.       \>>
  289.     \>>
  290.   ORR
  291.     \<< \-> m
  292.       \<<
  293.         CASE m "4" <
  294.           THEN "SLN." SWAP + " " + m W2D +
  295.           END m "8" <
  296.           THEN "SRN." SWAP + " " + m W2D +
  297.           END m "C" <
  298.           THEN "NEG." SWAP + " " + m W2D +
  299.           END "NOT." SWAP + " " + m W2D +
  300.         END
  301.       \>>
  302.     \>>
  303.   TT2F
  304.     \<<
  305.       IF 1 2 SUB DUP "90" <
  306.       THEN DROP "A"
  307.       ELSE XTON 8 MOD \->STR T2F
  308.       END
  309.     \>>
  310.   W2D2
  311.     \<< XTON 4 MOD 1 + { "B" "C" "A" "C" } SWAP GET
  312.     \>>
  313.   O81B
  314.     \<< \-> m
  315.       \<< m 2 1000 SUB { "" "" "JUMP.A A" "JUMP.A C" "MOVE.A. PC,A"
  316. "MOVE.A PC,C" "SWAP.A A,PC" "SWAP.A C,PC" } m 1 1 SUB XTOM GET EVAL
  317.       \>>
  318.     \>>
  319.   O81A
  320.     \<< \-> m
  321.       \<< m 4 1000 SUB { "MOVE." "SWAP." } m 2 2 SUB "2" == 1 + GET m 1 1 SUB
  322. T2F + " " +
  323.         IF m 3 3 SUB DUP "8" <
  324.         THEN "A"
  325.         ELSE "C"
  326.         END SWAP J2R
  327.         IF "1" m 2 2 SUB ==
  328.         THEN SWAP
  329.         END "," SWAP + + +
  330.       \>>
  331.     \>>
  332.   J2R
  333.     \<< XTON 8 MOD \->STR "R" SWAP +
  334.     \>>
  335.   W2D
  336.     \<< XTON 4 MOD 65 + CHR
  337.     \>>
  338.   T2F
  339.     \<< { "P" "WP" "XS" "X" "S" "M" "B" "W" "" "" "" "" "" "" "" "A" } SWAP
  340. XTOM GET
  341.     \>>
  342.   O81
  343.     \<< \-> m
  344.       \<< m 2 1000 SUB { "RLN.W A" "RLN.W B" "RLN.W C" "RLN.W D" "RRN.W A"
  345. "RRN.W B" "RRN.W C" "RRN.W D" 
  346.         \<<
  347.           IF m 3 3 SUB "4" <
  348.           THEN "ADD."
  349.           ELSE "SUB."
  350.           END m 2 2 SUB T2F + " " + m 4 4 SUB XINC + "," + m 3 3 SUB W2D + CUT3
  351.         \>>
  352.         \<< "SRB." m 2 2 SUB T2F + " " + m 3 3 SUB W2D + CUT2
  353.         \>>
  354.         \<< O81A
  355.         \>>
  356.         \<< O81B
  357.         \>> "SRB.W A" "SRB.W B" "SRB.W C" "SRB.W D" } m 1 1 SUB XTOM GET EVAL
  358.       \>>
  359.     \>>
  360.   O80
  361.     \<< \-> m
  362.       \<< m 2 1000 SUB { "OUT.S C" "OUT.X C" "IN.4 A" "IN.4 C" "UNCNFG"
  363. "CONFIG" "MOVE.A ID,C" "SHUTDN"
  364.         \<< O808
  365.         \>> "ADD.A P+1,C" "RESET" "BUSCC"
  366.         \<< "MOVE.1 P,C," m 2 2 SUB + CUT1
  367.         \>>
  368.         \<< "MOVE.1 C," m 2 2 SUB + ",P" + CUT1
  369.         \>> "SREQ"
  370.         \<< "SWAP.1 P,C," m 2 2 SUB + CUT1
  371.         \>> } m 1 1 SUB XTOM GET EVAL
  372.       \>>
  373.     \>>
  374.   O1
  375.     \<< \-> m
  376.       \<< m 2 1000 SUB {
  377.         \<< O10
  378.         \>>
  379.         \<< O11
  380.         \>>
  381.         \<< O12
  382.         \>>
  383.         \<< O13
  384.         \>>
  385.         \<< O14
  386.         \>>
  387.         \<< O15
  388.         \>>
  389.         \<< "ADD.A " m 2 2 SUB XINC + ",D0" + CUT1
  390.         \>>
  391.         \<< "ADD.A " m 2 2 SUB XINC + ",D1" + CUT1
  392.         \>>
  393.         \<< "SUB.A " m 2 2 SUB XINC + ",D0" + CUT1
  394.         \>>
  395.         \<< "MOVE.2 " m 2 3 SUB RVRS + ",D0" + CUT2
  396.         \>>
  397.         \<< "MOVE.4 " m 2 5 SUB RVRS + ",D0" + CUT4
  398.         \>>
  399.         \<< "MOVE.5 " m 2 6 SUB RVRS + ",D0" + CUT5
  400.         \>>
  401.         \<< "SUB.A " m 2 2 SUB XINC + ",D1" + CUT1
  402.         \>>
  403.         \<< "MOVE.2 " m 2 3 SUB RVRS + ",D1" + CUT2
  404.         \>>
  405.         \<< "MOVE.4 " m 2 5 SUB RVRS + ",D1" + CUT4
  406.         \>>
  407.         \<< "MOVE.5 " m 2 6 SUB RVRS + ",D1" + CUT5
  408.         \>> } m 1 1 SUB XTOM GET EVAL
  409.       \>>
  410.     \>>
  411.   XADD
  412.     \<< "#" ROT + STR\-> + \->STR DUP SIZE 1 - 3 SWAP SUB
  413.     \>>
  414.   CUT3
  415.     \<< SWAP 4 1000 SUB SWAP
  416.     \>>
  417.   XINC
  418.     \<< "#" SWAP + STR\-> 1 + \->STR DUP SIZE 1 - 3 SWAP SUB
  419.     \>>
  420.   CUTX
  421.     \<< ROT SWAP 1 + 1000 SUB SWAP
  422.     \>>
  423.   O15
  424.     \<< \-> m
  425.       \<< m 3 1000 SUB "MOVE." m 2 2 SUB m 1 1 SUB
  426.         IF "8" <
  427.         THEN { "P" "WP" "XS" "X" "S" "M" "B" "W" } SWAP XTOM GET +
  428.         ELSE XINC +
  429.         END " " + m 1 1 SUB O14X +
  430.       \>>
  431.     \>>
  432.   CUT5
  433.     \<< SWAP 6 1000 SUB SWAP
  434.     \>>
  435.   CUT4
  436.     \<< SWAP 5 1000 SUB SWAP
  437.     \>>
  438.   CUT2
  439.     \<< SWAP 3 1000 SUB SWAP
  440.     \>>
  441.   CUT1
  442.     \<< SWAP 2 1000 SUB SWAP
  443.     \>>
  444.   O12
  445.     \<< \-> m
  446.       \<< m 2 1000 SUB "SWAP.W " m 1 1 SUB DUP
  447.         IF "8" <
  448.         THEN "A,"
  449.         ELSE "C,"
  450.         END SWAP O10X + +
  451.       \>>
  452.     \>>
  453.   O10
  454.     \<< \-> m
  455.       \<< m 2 1000 SUB "MOVE.W " m 1 1 SUB DUP
  456.         IF "8" <
  457.         THEN "A,"
  458.         ELSE "C,"
  459.         END SWAP O10X + +
  460.       \>>
  461.     \>>
  462.   O14X
  463.     \<< XTOM DUP
  464.       IF 8 >
  465.       THEN 8 -
  466.       END { "A,@D0" "A,@D1" "@D0,A" "@D1,A" "C,@D0" "C,@D1" "@D0,C" "@D1.C" }
  467. SWAP GET
  468.     \>>
  469.   O14
  470.     \<< \-> m
  471.       \<< m 2 1000 SUB m 1 1 SUB DUP
  472.         IF "8" <
  473.         THEN "MOVE.A "
  474.         ELSE "MOVE.B "
  475.         END SWAP O14X +
  476.       \>>
  477.     \>>
  478.   O13
  479.     \<< \-> m
  480.       \<< m 2 1000 SUB { "MOVE.A A,D0" "MOVE.A A,D1" "SWAP.A A,D0"
  481. "SWAP.A A,D1" "MOVE.A C,D0" "MOVE.A C,D1" "SWAP.A C,D0" "SWAP.A C,D1"
  482. "MOVE.4 A,D0" "MOVE.4 A,D1" "SWAP.4 A,D0" "SWAP.4 A,D1" "MOVE.4 C,D0"
  483. "MOVE.4 C,D1" "SWAP.4 C,D0" "SWAP.4 C,D1" } m 1 1 SUB XTOM GET 
  484.       \>>
  485.     \>>
  486.   O11
  487.     \<< \-> m
  488.       \<< m 2 1000 SUB "MOVE.W " m 1 1 SUB DUP O10X SWAP
  489.         IF "8" <
  490.         THEN ",A"
  491.         ELSE ",C"
  492.         END + +
  493.       \>>
  494.     \>>
  495.   O10X
  496.     \<< XTON DUP
  497.       IF 7 >
  498.       THEN 8 -
  499.       END \->STR "R" SWAP +
  500.     \>>
  501.   O0EXP
  502.     \<< 1 1 SUB XTON
  503.       IF 8 <
  504.       THEN "AND."
  505.       ELSE "OR."
  506.       END
  507.     \>>
  508.   O0EXS
  509.     \<< 1 1 SUB XTOM DUP
  510.       IF 8 >
  511.       THEN 8 -
  512.       END { " B,A" " C,B" " A,C" " C,D" " A,B" " B,C" " C,A" " D,C" } SWAP GET
  513.     \>>
  514.   O0E
  515.     \<< \-> m
  516.       \<< m 3 1000 SUB m 2 1000 SUB DUP O0EXS SWAP O0EXP { "P" "WP" "XS" "X"
  517. "S" "M" "B" "W" "" "" "" "" "" "" "" "A" } m 1 1 SUB XTOM GET + SWAP +
  518.       \>>
  519.     \>>
  520.   XTOM
  521.     \<< "#" SWAP + STR\-> 1 + B\->R
  522.     \>>
  523.   PCAD
  524.     \<< \-> s
  525.       \<<
  526.         CASE s "PC+" POS DUP
  527.           THEN \-> n
  528.             \<< s 1 n 1 - SUB s n 3 + 1000 SUB S2B ADDR + DUP 'ADRJ' STO B2S +
  529.             \>>
  530.           END DROP s "PC-" POS DUP
  531.           THEN \-> n
  532.             \<< s 1 n 1 - SUB ADDR s n 3 + 1000 SUB S2B - DUP 'ADRJ' STO B2S +
  533.             \>>
  534.           END DROP s
  535.         END
  536.       \>>
  537.     \>>
  538. END
  539.